<?php
declare (strict_types = 1);

namespace app\index\controller;
use think\Request;
class IndexController extends indexBaseController
{
    public function index()
    {
        halt(App());
        // 要执行的命令
        $command = "php -v";

// 定义管道描述符
        $descriptorspec = [
            0 => ["pipe", "r"], // stdin（子进程从此读取，通常不需要时保持关闭）
            1 => ["pipe", "w"], // stdout（父进程从此读取子进程的输出）
            2 => ["pipe", "w"], // stderr（父进程从此读取子进程的错误）
        ];

// 工作目录（可选）
        $cwd = "/tmp";

// 环境变量（可选，设为空数组表示继承当前环境）
        $env = [
            'PATH' => '/www/server/php/84/bin:' . getenv('PATH')
        ];

// 存储管道句柄
        $pipes = [];

// 启动子进程
        $process = proc_open($command, $descriptorspec, $pipes, $cwd, $env);

        if (!is_resource($process)) {
            die("Failed to start process");
        }

// 不需要向子进程输入数据，直接关闭 stdin
        fclose($pipes[0]);

// 读取 stdout 和 stderr
        $stdout = stream_get_contents($pipes[1]); // 读取标准输出
        $stderr = stream_get_contents($pipes[2]); // 读取标准错误

// 关闭所有管道
        fclose($pipes[1]);
        fclose($pipes[2]);

// 获取子进程的退出状态码
        $exitCode = proc_close($process);

// 输出结果
        echo "标准输出:\n" . $stdout . "\n";
        echo "标准错误:\n" . $stderr . "\n";
        echo "退出状态码: " . $exitCode . "\n";

        return '<style>*{ padding: 0; margin: 0; }</style><iframe src="https://www.thinkphp.cn/welcome?version=' . \think\facade\App::version() . '" width="100%" height="100%" frameborder="0" scrolling="auto"></iframe>';
    }

    public function hello($name = 'ThinkPHP8')
    {
        return 'hello,' . $name;
    }
}